// G4提供的头文件
#include "G4ParticleTable.hh"       // G4的粒子查找表
#include "G4SystemOfUnits.hh"       // G4的单位制
#include "G4ThreeVector.hh"         // 三维直角坐标
// 用户编写的头文件
#include "G4ImprovePrimaryGeneratorAction.hh"

// 构造函数
G4ImprovePrimaryGeneratorAction::G4ImprovePrimaryGeneratorAction(){

    // 定义一个粒子源，并规定一次只能打出一个粒子
    particleGun = new G4ParticleGun(1);

    // 生成粒子源查找表
    auto table = G4ParticleTable::GetParticleTable();

    // 设置打出粒子的类型，规定打出伽马射线
    particleGun->SetParticleDefinition(table->FindParticle("gamma"));
    
    // 设置粒子源位置
    particleGun->SetParticlePosition(G4ThreeVector(0,0,0));
    // 设置粒子源发射方向
    particleGun->SetParticleMomentumDirection(G4ThreeVector(0,1,0));


}

// 析构函数
G4ImprovePrimaryGeneratorAction::~G4ImprovePrimaryGeneratorAction(){

    delete particleGun;     // 释放内存
}

// 事件生成函数
void G4ImprovePrimaryGeneratorAction::GeneratePrimaries(G4Event* e){

    // 设置粒子的能量
    particleGun->SetParticleEnergy(1.17 * MeV);
    particleGun->GeneratePrimaryVertex(e);
    // 设置粒子的能量
    particleGun->SetParticleEnergy(1.33 * MeV);
    particleGun->GeneratePrimaryVertex(e);
}
